package ai.people.netmon.framework.domain.system.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.people.core.validator.annotation.NumberStatusValue;
import com.people.core.validator.group.AddGroup;
import com.people.core.validator.group.UpdateGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.time.LocalDateTime;

/**
 * 系统菜单
 * @since 1.0
 * @author yuanqinglong
 * @date 2022/3/21 18:46
 */
@Data
@TableName(value = "nm_sys_menu")
public class NmSystemMenu {


    /**
     * id
     * @mock 2
     */
    @TableId
    @JSONField(serializeUsing = ToStringSerializer.class)
    @NotNull(groups = {UpdateGroup.class}, message = "菜单id不可为空")
    @Null(groups = {AddGroup.class}, message = "菜单id非法")
    private Long id;

    /**
     * 父id
     * @mock 1
     */
    @NotNull(message = "父级id为空")
    @JSONField(serializeUsing = ToStringSerializer.class)
    private Long parentId;

    /**
     * 菜单名称
     * @mock 用户管理
     */
    @NotEmpty(message = "菜单名称为空")
    private String menuName;

    /**
     * 菜单昵称
     * @mock 用户管理
     */
    private String menuNickName;

    /**
     * 菜单类型
     * @mock 1
     */
    @NotNull(message = "菜单类型为空")
    @NumberStatusValue(values = {1, 2, 3}, message = "菜单类型错误")
    private Integer menuType;

    /**
     * 菜单路径
     * @mock tor-global-situation
     */
    private String menuPath;

    /**
     * 组件路径
     * @mock AS_GRO_V2
     */
    private String componentPath;

    /**
     * 菜单级别
     * @mock 1
     */
    @NotNull(message = "菜单级别为空")
    @Range(min = 1, max = 128, message = "菜单级别错误")
    private Integer menuLevel;

    /**
     * 菜单图标
     * @mock nmIconfont
     */
    private String menuIcon;

    /**
     * 是否可用（0:不可用，1:可用）
     * @mock 1
     */
    @NotNull(message = "菜单启用状态为空")
    @NumberStatusValue(values = {0, 1}, message = "菜单启用状态错误")
    private Integer isEnable;

    /**
     * 是否为外链（0:不是，1:是）
     * @mock 1
     */
    @NotNull(message = "外链状态为空")
    @NumberStatusValue(values = {0, 1}, message = "外链状态错误")
    private Integer isOpen;

    /**
     * 菜单状态（0:隐藏，1:显示 ）
     * @mock 1
     */
    @NotNull(message = "菜单状态为空")
    @NumberStatusValue(values = {0, 1}, message = "菜单状态错误")
    private Integer isVisible;

    /**
     * 排序
     * @mock 1
     */
    private Integer orderNum;

    /**
     *
     */
    private String perms;

    /**
     * 创建用户id
     * @ignore
     */
    private Long createUserId;

    /**
     * 创建时间
     * @ignore
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     * @ignore
     */
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 备注
     * @mock 这是备注
     */
    private String remark;
}
